-- 死亡报告管理系统数据库创建脚本
-- 适用于 SQL Server

USE master;
GO

-- 创建数据库
CREATE DATABASE DeathReportManagement
GO

USE DeathReportManagement;
GO

-- 创建用户表
CREATE TABLE Users (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    DoctorCode NVARCHAR(50) NOT NULL,
    Name NVARCHAR(100) NOT NULL,
    Department NVARCHAR(100),
    Role NVARCHAR(20) NOT NULL DEFAULT 'Doctor', -- Doctor, Admin
    Password NVARCHAR(255), -- 仅管理员需要
    IsActive BIT NOT NULL DEFAULT 1,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateTime DATETIME2 NOT NULL DEFAULT GETDATE()
);

-- 创建死亡报告表
CREATE TABLE DeathReports (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    ReportNo NVARCHAR(50) NOT NULL UNIQUE,
    
    -- 基础信息
    OutpatientNo NVARCHAR(50),
    InpatientNo NVARCHAR(50),
    HospitalizationCount INT,
    DeceasedName NVARCHAR(100) NOT NULL,
    IsAnonymous BIT NOT NULL DEFAULT 0,
    Gender NVARCHAR(10) NOT NULL, -- 男, 女, 未知的
    Ethnicity NVARCHAR(50) NOT NULL,
    CountryOrRegion NVARCHAR(50) NOT NULL DEFAULT '中国',
    
    -- 证件信息
    IdType NVARCHAR(50) NOT NULL,
    IdNumber NVARCHAR(50) NOT NULL,
    BirthDate DATE NOT NULL,
    Age INT NOT NULL,
    AgeUnit NVARCHAR(10) NOT NULL, -- 岁, 月, 天
    
    -- 个人信息
    MaritalStatus NVARCHAR(20) NOT NULL,
    Education NVARCHAR(50) NOT NULL,
    PersonalIdentity NVARCHAR(50) NOT NULL,
    
    -- 死亡信息
    DeathDateTime DATETIME2 NOT NULL,
    DeathLocation NVARCHAR(100) NOT NULL,
    IsPregnant BIT NOT NULL DEFAULT 0,
    WorkUnit NVARCHAR(200) NOT NULL,
    
    -- 地址信息
    HouseholdAddressType NVARCHAR(20) NOT NULL DEFAULT '本县区',
    HouseholdAddress NVARCHAR(500),
    HouseholdAddressCode NVARCHAR(50),
    HouseholdDetailAddress NVARCHAR(500) NOT NULL,
    
    ResidenceAddressType NVARCHAR(20) NOT NULL,
    ResidenceAddress NVARCHAR(500) NOT NULL,
    ResidenceDetailAddress NVARCHAR(500) NOT NULL,
    
    -- 联系人信息
    ContactName NVARCHAR(100) NOT NULL,
    ContactPhone NVARCHAR(50) NOT NULL,
    ContactIdType NVARCHAR(50) NOT NULL DEFAULT '身份证',
    
    -- 32. 家属住址或工作单位
    FamilyAddressOrWorkUnit NVARCHAR(200) NOT NULL,
    
    -- 死因链A-D字段
    -- 33. 直接导致死亡的疾病A
    DeathCauseA NVARCHAR(200) NOT NULL,
    -- 34. 疾病A的ICD10编码
    DeathCauseAIcd10 NVARCHAR(10),
    -- 35. A疾病发病至死亡的时间间隔
    DeathCauseAInterval DECIMAL(5,1),
    -- 36. 间隔时间单位A
    DeathCauseAIntervalUnit NVARCHAR(10),
    
    -- 37. 直接导致死亡的疾病B
    DeathCauseB NVARCHAR(200),
    -- 38. 疾病B的ICD10编码
    DeathCauseBIcd10 NVARCHAR(10),
    -- 39. B疾病发病至死亡的时间间隔
    DeathCauseBInterval DECIMAL(5,1),
    -- 40. 间隔时间单位B
    DeathCauseBIntervalUnit NVARCHAR(10),
    
    -- 41. 直接导致死亡的疾病C
    DeathCauseC NVARCHAR(200),
    -- 42. 疾病C的ICD10编码
    DeathCauseCIcd10 NVARCHAR(10),
    -- 43. C疾病发病至死亡的时间间隔
    DeathCauseCInterval DECIMAL(5,1),
    -- 44. 间隔时间单位C
    DeathCauseCIntervalUnit NVARCHAR(10),
    
    -- 45. 直接导致死亡的疾病D
    DeathCauseD NVARCHAR(200),
    -- 46. 疾病D的ICD10编码
    DeathCauseDIcd10 NVARCHAR(10),
    -- 47. D疾病发病至死亡的时间间隔
    DeathCauseDInterval DECIMAL(5,1),
    -- 48. 间隔时间单位D
    DeathCauseDIntervalUnit NVARCHAR(10),
    
    -- 49. 其他疾病原因
    OtherCause NVARCHAR(200),
    -- 50. 其他病因ICD10编码
    OtherCauseIcd10 NVARCHAR(10),
    
    -- 51. 根本死亡原因描述
    UnderlyingCause NVARCHAR(200),
    -- 52. 根本死亡原因ICD10编码
    UnderlyingCauseIcd10 NVARCHAR(10),
    
    -- 53. 最高诊断单位
    HighestDiagnosisUnit NVARCHAR(20),
    -- 54. 最高诊断依据
    HighestDiagnosisBasis NVARCHAR(20),
    
    -- 55. 填卡医生
    FillingDoctor NVARCHAR(50) NOT NULL,
    -- 56. 医生填卡日期
    FillingDate DATETIME2 NOT NULL DEFAULT GETDATE(),
    
    -- 57. 审核人
    AuditorName NVARCHAR(50),
    -- 58. 民警签名
    PoliceSignature NVARCHAR(50),
    -- 59. 备注
    Remarks NVARCHAR(40),
    
    -- 60. 死者生前病史及症状体征
    MedicalHistoryAndSymptoms NVARCHAR(800),
    -- 61. 被调查者姓名
    IntervieweeName NVARCHAR(20),
    -- 62. 与死者关系
    RelationshipToDeceased NVARCHAR(10),
    -- 63. 联系地址或工作单位
    IntervieweeAddress NVARCHAR(100),
    -- 64. 被调查者电话号码
    IntervieweePhone NVARCHAR(18),
    
    -- 65. 死因推断
    CauseInference NVARCHAR(60),
    -- 66. 调查者签名
    InvestigatorSignature NVARCHAR(20),
    -- 67. 调查日期
    InvestigationDate DATETIME2,
    -- 68. 审核日期
    AuditDate DATETIME2,
    -- 69. 错误内容
    ErrorContent NVARCHAR(300),
    
    -- 状态信息
    AuditStatus INT NOT NULL DEFAULT 0, -- 0-待审核, 1-已审核
    ReportStatus INT NOT NULL DEFAULT 0, -- 0-附联未上报, 1-附联已上报, 2-主联已上报
    
    -- 审计信息
    CreateBy INT NOT NULL,
    CreateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    UpdateBy INT,
    UpdateTime DATETIME2,
    AuditBy INT,
    AuditTime DATETIME2,
    
    FOREIGN KEY (CreateBy) REFERENCES Users(Id),
    FOREIGN KEY (UpdateBy) REFERENCES Users(Id),
    FOREIGN KEY (AuditBy) REFERENCES Users(Id)
);

-- 创建ICD10编码表
CREATE TABLE Icd10s (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Code NVARCHAR(10) NOT NULL UNIQUE,
    Name NVARCHAR(200) NOT NULL,
    Category NVARCHAR(10),
    Description NVARCHAR(500),
    IsActive BIT NOT NULL DEFAULT 1
);

-- 创建操作日志表
CREATE TABLE OperationLogs (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    ReportId INT,
    Operation NVARCHAR(100) NOT NULL,
    UserId INT NOT NULL,
    OperateTime DATETIME2 NOT NULL DEFAULT GETDATE(),
    Remark NVARCHAR(500),
    
    FOREIGN KEY (ReportId) REFERENCES DeathReports(Id),
    FOREIGN KEY (UserId) REFERENCES Users(Id)
);

-- 创建字典表
CREATE TABLE Dictionaries (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Type NVARCHAR(50) NOT NULL,
    Code NVARCHAR(50) NOT NULL,
    Name NVARCHAR(100) NOT NULL,
    ParentCode NVARCHAR(50),
    SortOrder INT NOT NULL DEFAULT 0,
    IsActive BIT NOT NULL DEFAULT 1
);

-- 插入基础字典数据
-- 民族字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('Ethnicity', '01', '汉族', 1),
('Ethnicity', '02', '蒙古族', 2),
('Ethnicity', '03', '回族', 3),
('Ethnicity', '04', '藏族', 4),
('Ethnicity', '05', '维吾尔族', 5),
('Ethnicity', '06', '苗族', 6),
('Ethnicity', '07', '彝族', 7),
('Ethnicity', '08', '壮族', 8),
('Ethnicity', '09', '布依族', 9),
('Ethnicity', '10', '朝鲜族', 10),
('Ethnicity', '11', '满族', 11),
('Ethnicity', '12', '侗族', 12),
('Ethnicity', '13', '瑶族', 13),
('Ethnicity', '14', '白族', 14),
('Ethnicity', '15', '土家族', 15),
('Ethnicity', '16', '哈尼族', 16),
('Ethnicity', '17', '哈萨克族', 17),
('Ethnicity', '18', '傣族', 18),
('Ethnicity', '19', '黎族', 19),
('Ethnicity', '20', '傈僳族', 20),
('Ethnicity', '21', '佤族', 21),
('Ethnicity', '22', '畲族', 22),
('Ethnicity', '23', '高山族', 23),
('Ethnicity', '24', '拉祜族', 24),
('Ethnicity', '25', '水族', 25),
('Ethnicity', '26', '东乡族', 26),
('Ethnicity', '27', '纳西族', 27),
('Ethnicity', '28', '景颇族', 28),
('Ethnicity', '29', '柯尔克孜族', 29),
('Ethnicity', '30', '土族', 30),
('Ethnicity', '31', '达斡尔族', 31),
('Ethnicity', '32', '仫佬族', 32),
('Ethnicity', '33', '羌族', 33),
('Ethnicity', '34', '布朗族', 34),
('Ethnicity', '35', '撒拉族', 35),
('Ethnicity', '36', '毛南族', 36),
('Ethnicity', '37', '仡佬族', 37),
('Ethnicity', '38', '锡伯族', 38),
('Ethnicity', '39', '阿昌族', 39),
('Ethnicity', '40', '普米族', 40),
('Ethnicity', '41', '塔吉克族', 41),
('Ethnicity', '42', '怒族', 42),
('Ethnicity', '43', '乌孜别克族', 43),
('Ethnicity', '44', '俄罗斯族', 44),
('Ethnicity', '45', '鄂温克族', 45),
('Ethnicity', '46', '德昂族', 46),
('Ethnicity', '47', '保安族', 47),
('Ethnicity', '48', '裕固族', 48),
('Ethnicity', '49', '京族', 49),
('Ethnicity', '50', '塔塔尔族', 50),
('Ethnicity', '51', '独龙族', 51),
('Ethnicity', '52', '鄂伦春族', 52),
('Ethnicity', '53', '赫哲族', 53),
('Ethnicity', '54', '门巴族', 54),
('Ethnicity', '55', '珞巴族', 55),
('Ethnicity', '56', '基诺族', 56);

-- 证件类型字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('IdType', 'ID_CARD', '身份证', 1),
('IdType', 'HOUSEHOLD', '户口薄', 2),
('IdType', 'PASSPORT', '护照', 3),
('IdType', 'MILITARY', '军官证', 4),
('IdType', 'OTHER', '其他', 5);

-- 婚姻状况字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('MaritalStatus', 'SINGLE', '未婚', 1),
('MaritalStatus', 'MARRIED', '已婚', 2),
('MaritalStatus', 'WIDOWED', '丧偶', 3),
('MaritalStatus', 'DIVORCED', '离异', 4),
('MaritalStatus', 'UNKNOWN', '未说明', 5);

-- 文化程度字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('Education', 'GRADUATE', '研究生教育', 1),
('Education', 'UNDERGRADUATE', '大学本科', 2),
('Education', 'COLLEGE', '专科教育', 3),
('Education', 'VOCATIONAL', '中等职业教育', 4),
('Education', 'TECHNICAL', '技工学校毕业', 5),
('Education', 'HIGH_SCHOOL', '普通高级中学教育', 6),
('Education', 'MIDDLE_SCHOOL', '初级中学教育', 7),
('Education', 'PRIMARY', '小学教育', 8),
('Education', 'NONE', '未上过学', 9);

-- 个人身份字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('PersonalIdentity', 'CIVIL_SERVANT', '公务员', 1),
('PersonalIdentity', 'PROFESSIONAL', '专业技术人员', 2),
('PersonalIdentity', 'CLERK', '职员', 3),
('PersonalIdentity', 'MANAGER', '企业管理者', 4),
('PersonalIdentity', 'WORKER', '工人', 5),
('PersonalIdentity', 'FARMER', '农民', 6),
('PersonalIdentity', 'STUDENT', '学生', 7),
('PersonalIdentity', 'MILITARY', '军人', 8),
('PersonalIdentity', 'OTHER', '其他', 9);

-- 死亡地点字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('DeathLocation', 'ON_WAY', '来院途中', 1),
('DeathLocation', 'HOME', '家中', 2),
('DeathLocation', 'HOSPITAL', '医院', 3),
('DeathLocation', 'NURSING_HOME', '养老服务机构', 4),
('DeathLocation', 'OTHER', '其他场所', 5);

-- 地址类型字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('AddressType', 'LOCAL_COUNTY', '本县区', 1),
('AddressType', 'LOCAL_CITY', '本市其它县区', 2),
('AddressType', 'LOCAL_PROVINCE', '本省其它地市', 3),
('AddressType', 'OTHER_PROVINCE', '其他省', 4),
('AddressType', 'HK_MACAO_TAIWAN', '港澳台', 5),
('AddressType', 'FOREIGN', '外籍', 6);

-- 插入常用ICD10编码数据
INSERT INTO Icd10s (Code, Name, Category, Description) VALUES
-- 心血管疾病
('I21', '急性心肌梗死', 'I', '急性心肌梗死'),
('I25', '慢性缺血性心脏病', 'I', '慢性缺血性心脏病'),
('I50', '心力衰竭', 'I', '心力衰竭'),
('I46', '心脏停搏', 'I', '心脏停搏'),

-- 呼吸系统疾病  
('J44', '其他慢性阻塞性肺疾病', 'J', '其他慢性阻塞性肺疾病'),
('J18', '其他病原体肺炎', 'J', '其他病原体肺炎'),
('J80', '成人呼吸窘迫综合征', 'J', '成人呼吸窘迫综合征'),

-- 恶性肿瘤
('C78', '呼吸和消化器官继发性恶性肿瘤', 'C', '呼吸和消化器官继发性恶性肿瘤'),
('C34', '支气管和肺恶性肿瘤', 'C', '支气管和肺恶性肿瘤'),
('C16', '胃恶性肿瘤', 'C', '胃恶性肿瘤'),
('C25', '胰腺恶性肿瘤', 'C', '胰腺恶性肿瘤'),

-- 脑血管疾病
('I64', '脑卒中，未特指为出血性或梗死性', 'I', '脑卒中，未特指为出血性或梗死性'),
('I61', '脑内出血', 'I', '脑内出血'),
('I63', '脑梗死', 'I', '脑梗死'),

-- 外伤
('S06', '颅内损伤', 'S', '颅内损伤'),
('T14', '未特指身体部位的损伤', 'T', '未特指身体部位的损伤'),

-- 其他常见死因
('R57', '休克，他处未分类', 'R', '休克，他处未分类'),
('R99', '其他不明确和未特指的死因', 'R', '其他不明确和未特指的死因'),
('N18', '慢性肾脏病', 'N', '慢性肾脏病'),
('K72', '肝衰竭，他处未分类', 'K', '肝衰竭，他处未分类'),

-- 感染性疾病
('A41', '其他脓毒症', 'A', '其他脓毒症'),
('B34', '未特指部位的病毒感染', 'B', '未特指部位的病毒感染');

-- 新增最高诊断单位字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('HighestDiagnosisUnit', 'TERTIARY', '三级医院', 1),
('HighestDiagnosisUnit', 'SECONDARY', '二级医院', 2),
('HighestDiagnosisUnit', 'VILLAGE', '村卫生室', 3);

-- 新增最高诊断依据字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('HighestDiagnosisBasis', 'AUTOPSY', '尸检', 1),
('HighestDiagnosisBasis', 'PATHOLOGY', '病理', 2),
('HighestDiagnosisBasis', 'SURGERY', '手术', 3),
('HighestDiagnosisBasis', 'POSTMORTEM', '死后推断', 4);

-- 新增时间间隔单位字典
INSERT INTO Dictionaries (Type, Code, Name, SortOrder) VALUES
('IntervalUnit', 'HOUR', '小时', 1),
('IntervalUnit', 'DAY', '日', 2),
('IntervalUnit', 'MONTH', '月', 3),
('IntervalUnit', 'YEAR', '年', 4);

-- 创建索引
CREATE INDEX IX_DeathReports_ReportNo ON DeathReports(ReportNo);
CREATE INDEX IX_DeathReports_CreateBy ON DeathReports(CreateBy);
CREATE INDEX IX_DeathReports_CreateTime ON DeathReports(CreateTime);
CREATE INDEX IX_DeathReports_AuditStatus ON DeathReports(AuditStatus);
CREATE INDEX IX_DeathReports_ReportStatus ON DeathReports(ReportStatus);
CREATE INDEX IX_Users_DoctorCode ON Users(DoctorCode);
CREATE INDEX IX_OperationLogs_ReportId ON OperationLogs(ReportId);
CREATE INDEX IX_OperationLogs_UserId ON OperationLogs(UserId);
CREATE INDEX IX_Icd10s_Code ON Icd10s(Code);
CREATE INDEX IX_Icd10s_Name ON Icd10s(Name);
CREATE INDEX IX_Icd10s_Category ON Icd10s(Category);

-- 插入默认管理员用户
INSERT INTO Users (DoctorCode, Name, Department, Role, Password, IsActive) 
VALUES ('ADMIN', '系统管理员', '信息科', 'Admin', 'admin123', 1);

GO